home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / yacas_alg / yacas_morphos / share / yacas / complex.rep / code.ys < prev   
Encoding:
Text File  |  2002-03-13  |  2.6 KB  |  89 lines

  1.  
  2. /* Complex numbers */
  3.  
  4. 0 # Complex(_r,0) <-- r;
  5. 2 # Complex(Complex(_r1,_i1),_i2) <-- Complex(r1,i1+i2);
  6. 2 # Complex(_r1,Complex(_r2,_i2)) <-- Complex(r1-i2,r2);
  7.  
  8.  
  9. /*Real parts */
  10. 110 # Re(Complex(_r,_i)) <-- r;
  11. 300 # Re(_x) <-- x;
  12.  
  13. /* Imaginary parts */
  14. 110 # Im(Complex(_r,_i)) <-- i;
  15. 300 # Im(_x) <-- 0;
  16.  
  17. /* All things you can request a real and imaginary part for are complex */
  18. 1 # IsComplex(x_IsNumber)     <-- True;
  19. 2 # IsComplex(Complex(_r,_i)) <-- True;
  20. 3 # IsComplex(_x)             <-- False;
  21.  
  22. IsNotComplex(x) := Not(IsComplex(x));
  23. /* Addition */
  24.  
  25. 110 # Complex(_r1,_i1) + Complex(_r2,_i2) <-- Complex(r1+r2,i1+i2);
  26. 300 # Complex(_r,_i) + x_IsConstant <-- Complex(r+x,i);
  27. 300 # x_IsConstant + Complex(_r,_i) <-- Complex(r+x,i);
  28.  
  29. 110 # - Complex(_r,_i) <-- Complex(-r,-i);
  30.  
  31. 300 # Complex(_r,_i) - x_IsConstant <-- Complex(r-x,i);
  32. 300 # x_IsConstant - Complex(_r,_i) <-- Complex((-r)+x,-i);
  33. 111 # Complex(_r1,_i1) - Complex(_r2,_i2) <-- Complex(r1-r2,i1-i2);
  34.  
  35. /* Multiplication */
  36. 110 # Complex(_r1,_i1) * Complex(_r2,_i2) <--
  37.     Complex(r1*r2-i1*i2,r1*i2+r2*i1);
  38. 300 # Complex(_r,_i) * y_IsConstant <-- Complex(r*y,i*y);
  39. 300 # y_IsConstant * Complex(_r,_i) <-- Complex(r*y,i*y);
  40.  
  41. 330 # Complex(_r,_i) * (y_IsConstant / _z) <-- (Complex(r*y,i*y))/z;
  42. 330 # (y_IsConstant / _z) * Complex(_r,_i) <-- (Complex(r*y,i*y))/z;
  43.  
  44.  
  45. 110 # x_IsConstant / Complex(_r,_i) <-- (x*Conjugate(Complex(r,i)))/(r^2+i^2);
  46.  
  47.  
  48. 300 # Complex(_r,_i) / y_IsConstant <-- Complex(r/y,i/y);
  49.  
  50. 110 # (_x ^ Complex(_r,_i)) <-- Exp(Complex(r,i)*Ln(x));
  51.  
  52. 110 # Sqrt(Complex(_r,_i)) <-- Exp(Ln(Complex(r,i))/2);
  53. 110 # (Complex(_r,_i) ^ x_IsRationalOrNumber)_(Not(IsInteger(x))) <-- Exp(x*Ln(Complex(r,i)));
  54.  
  55. 120 # Complex(0,_i) ^ n_IsPositiveInteger <--
  56.   If(IsOdd(n),
  57.     Complex(0,If(IsZero(Mod(n-1,4)),1,-1)*i^n),
  58.     If(IsZero(Mod(n,4)),1,-1)*i^n); 
  59.  
  60. 121 # Complex(_r,_i) ^ n_IsPositiveInteger <-- 
  61. [
  62.   Local(rr,ii,count,sign);
  63.   
  64.   rr:=r^n;
  65.   ii:=0;
  66.   For(count:=1,count<=n,count:=count+2) [
  67.     sign:=If(IsZero(Mod(count-1,4)),1,-1);
  68.     ii:=ii+sign*Bin(n,count)*i^count*r^(n-count);
  69.     If(count<n, 
  70.       rr:=rr-sign*Bin(n,count+1)*i^(count+1)*r^(n-count-1));
  71.   ];
  72.   Complex(rr,ii);
  73. ];
  74.  
  75.  
  76. Function("Conjugate",{a})
  77.   Substitute(a,{{x},Type(x)="Complex"},{{x},Complex(x[1],-(x[2]))});
  78.  
  79.  
  80. 10 # Arg(x_IsZero) <-- Undefined;
  81. 15 # Arg(x_IsPositiveReal) <-- 0;
  82. 15 # Arg(x_IsNegativeReal) <-- Pi;
  83. 20 # Arg(Complex(r_IsZero,i_IsConstant)) <-- Sign(i)*Pi/2;
  84. 30 # Arg(Complex(r_IsPositiveReal,i_IsConstant)) <-- ArcTan(i/r);
  85. 40 # Arg(Complex(r_IsNegativeReal,i_IsPositiveReal)) <-- Pi+ArcTan(i/r);
  86. 50 # Arg(Complex(r_IsNegativeReal,i_IsNegativeReal)) <-- ArcTan(i/r)-Pi;
  87.  
  88.  
  89.